
public class SimpleBuffer<T> {
	private T content;
	private Object codaProduttori;
	private Object codaConsumatori;
	
	public SimpleBuffer() {
		codaProduttori=new Object();
		codaConsumatori=new Object();
		content=null;
	}
	
	public  void put(T value) {
		synchronized (codaProduttori) {
			while (content != null) {
				try {
					codaProduttori.wait();					
				} catch (InterruptedException exc) { }
			}
		
		
			content = value;
		}
		
		synchronized (codaConsumatori) {
			codaConsumatori.notify();
		}
		
	}
	
	public T take() {
		T value;
		
		synchronized (codaConsumatori) {
			while (content==null) {
				try {
					codaConsumatori.wait();
				} catch (InterruptedException exc) { }
			}
			
			value=content;
			content=null;
		}
		
		synchronized (codaProduttori) {
			codaProduttori.notify();
		}
		
		return value;
	}
	
}
